foreach lang : [ 'python', 'gjs' ]

  # XXX meson does not allow building into subdir:
  # https://github.com/mesonbuild/meson/issues/2320
  # Otherwise I could use '-o', '@OUTDIR@' into following commands if
  # the `output` was subdir-able.
  gir_docs_dir = custom_target('g-ir-docs-' + lang + '-dir',
    depends: [ libgimp_gir, libgimpui_gir ],
    input: [ ],
    output: [ 'gir-' + lang + '-dirs' ],
    command: [
      'mkdir', '-p',
      '@OUTDIR@' + '/pages/' + lang + '/GimpUi-' + gimp_api_version,
      '@OUTDIR@' + '/pages/' + lang + '/Gimp-' + gimp_api_version,
      '@OUTDIR@' + '/html/' + lang + '/GimpUi-' + gimp_api_version,
      '@OUTDIR@' + '/html/' + lang + '/Gimp-' + gimp_api_version
    ],
    build_by_default: true)

  # XXX `output` is bogus. g-ir-doc-tool produces a lot of output,
  # basically one page per public symbol, which is more than 1000 so
  # it's not usable. Since custom_target() requires an 'output', I could
  # just set one output such as 'index.page` as a trick, but since we
  # have another issue on subdir anyway (cf. above), I use some bogus
  # file instead. The fact the bogus file is not even created does not
  # even seem to be a problem for meson.
  # Moreover I realized that the targets listed by ninja are only the
  # output files (not the target name), so I basically ends up using
  # this field to create understandable names).
  gir_docs_pages = custom_target('g-ir-Gimp-' + lang + '-pages',
    depends: [ gir_docs_dir, libgimp_gir ],
    input: [ libgimp_gir[0] ],
    output: [ 'Gimp-' + lang + '-pages' ],
    command: [
      gir_doc_tool,
      '-I', prefix / 'share/gir-1.0/',
      '-I', meson.build_root() / 'libgimp',
      '--language=' + lang,
      '-o', '@OUTDIR@' + '/pages/' + lang + '/Gimp-' + gimp_api_version,
      '@INPUT@'
    ],
    build_by_default: true)

  ## Gimp Module ##

  gir_docs_cache = custom_target('g-ir-Gimp-' + lang + '-cache',
    input: [ gir_docs_pages ],
    output: [ 'Gimp-' + lang + '-cache' ],
    command: [
      yelp_build, 'cache',
      '-o', '@OUTDIR@' + '/pages/' + lang + '/Gimp-' + gimp_api_version + '/index.cache',
      '@OUTDIR@' + '/pages/' + lang + '/Gimp-' + gimp_api_version,
    ],
    build_by_default: true)

  gir_docs_html = custom_target('g-ir-Gimp-' + lang + '-html',
    input: [ gir_docs_cache ],
    output: [ 'Gimp-' + lang + '-html' ],
    # TODO: `output` needs to be complete for installation to work. So
    # we need to figure out how to install the generated files (listing
    # all of them is a crazy idea, but maybe we can generate the
    # expected list somehow? Maybe even using the .def file which is
    # already an exhaustive listing would be a good idea?
    # Also where should we install exactly?
    #install_dir: prefix / gimpdatadir / 'g-ir-docs/html/' + lang + '/Gimp',
    #install: true,
    command: [
      'yelp-build', 'html',
      '-o', '@OUTDIR@' + '/html/' + lang + '/Gimp-' + gimp_api_version,
      '@OUTDIR@' + '/pages/' + lang + '/Gimp-' + gimp_api_version,
    ],
    build_by_default: true)

  ## GimpUi module ##

  gir_ui_docs_pages = custom_target('g-ir-GimpUi-' + lang + '-pages',
    depends: [ gir_docs_dir, libgimpui_gir ],
    input: [ libgimpui_gir[0] ],
    output: [ 'GimpUi-' + lang + '-pages' ],
    command: [
      gir_doc_tool,
      '-I', prefix / 'share/gir-1.0/',
      '-I', meson.build_root() / 'libgimp',
      '--language=' + lang,
      '-o', '@OUTDIR@' + '/pages/' + lang + '/GimpUi-' + gimp_api_version,
      '@INPUT@'
    ],
    build_by_default: true)

  gir_ui_docs_cache = custom_target('g-ir-GimpUi-' + lang + '-cache',
    input: [ gir_ui_docs_pages ],
    output: [ 'GimpUi-' + lang + '-cache' ],
    command: [
      yelp_build, 'cache',
      '-o', '@OUTDIR@' + '/pages/' + lang + '/GimpUi-' + gimp_api_version + '/index.cache',
      '@OUTDIR@' + '/pages/' + lang + '/GimpUi-' + gimp_api_version,
    ],
    build_by_default: true)

  gir_ui_docs_html = custom_target('g-ir-GimpUi-' + lang + '-html',
    input: [ gir_ui_docs_cache ],
    output: [ 'GimpUi-' + lang + '-html' ],
    #install_dir: prefix / gimpdatadir / 'g-ir-docs/html/' + lang + '/GimpUi',
    #install: true,
    command: [
      'yelp-build', 'html',
      '-o', '@OUTDIR@' + '/html/' + lang + '/GimpUi-' + gimp_api_version,
      '@OUTDIR@' + '/pages/' + lang + '/GimpUi-' + gimp_api_version,
    ],
    build_by_default: true)

endforeach

## TODO: a unit test using yelp-check would be useful.
